home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / UTILITY1 / MSWLGO35.ZIP / EXAMPLES / CRYPTO < prev    next >
Text File  |  1993-04-11  |  7KB  |  322 lines

  1. ;
  2. ; This uses cursor addressing (not avail in MswLogo) could be reworked though
  3. ;
  4. TO ALPHABET :STRING
  5. IF EMPTYP :STRING [STOP]
  6. IF NAMEP THING FIRST :STRING [LIGHT THING FIRST :STRING]
  7. ALPHABET BF :STRING
  8. END
  9.  
  10. TO BEEP
  11. TYPE CHAR 7
  12. END
  13.  
  14. TO BIND :FROM :TO
  15. IF NOT NAMEP :FROM [BEEP STOP]
  16. IF NAMEP WORD "BOUND :TO [BEEP STOP]
  17. IF NAMEP THING :FROM [DARK THING :FROM]
  18. MAKE :FROM :TO
  19. FIXHIST :FROM
  20. IF NAMEP :TO [LIGHT :TO]
  21. SHOWCLEAR :TEXT
  22. END
  23.  
  24. TO BINDLOOP
  25. PARSEKEY RC
  26. BINDLOOP
  27. END
  28.  
  29. TO CLEARLET :LETTER
  30. IFELSE NAMEP :LETTER [TYPE THING :LETTER] [TYPE :LETTER]
  31. END
  32.  
  33. TO CLEARTYPE :WORD
  34. IF EMPTYP :WORD [STOP]
  35. CLEARLET FIRST :WORD
  36. CLEARTYPE BF :WORD
  37. END
  38.  
  39. TO CLEARWORD :ROW :COL :WORD
  40. SETCURSOR LIST :COL :ROW+1
  41. CLEARTYPE :WORD
  42. END
  43.  
  44. TO CNT :LETTER
  45. OUTPUT THING (WORD "CNT :LETTER)
  46. END
  47.  
  48. TO CODEWORD :ROW :COL :WORD
  49. SETCURSOR LIST :COL :ROW
  50. INVTYPE :WORD
  51. END
  52.  
  53. TO COUNT. :WORD
  54. OUTPUT THING (WORD "COUNT. :WORD)
  55. END
  56.  
  57. TO CRYPTO :TEXT
  58. MAKE "FULLTEXT :TEXT
  59. MAKE "MORETEXT []
  60. MAKE "TEXTSTACK []
  61. INITVARS "A "Z
  62. MAKE "MAXCOUNT 0
  63. INITCOUNT "SINGLE
  64. INITCOUNT "TRIPLE
  65. CT
  66. HISTOGRAM :TEXT
  67. REDISPLAY "FALSE
  68. IF OR GUESS.SINGLE GUESS.TRIPLE [SHOWCLEAR :TEXT]
  69. BINDLOOP
  70. END
  71.  
  72. TO DARK :LETTER
  73. SETCURSOR LIST 6+(ASCII :LETTER)-(ASCII "A) 6
  74. TYPE :LETTER
  75. ERN WORD "BOUND :LETTER
  76. END
  77.  
  78. TO FIXHIST :LETTER
  79. SETCURSOR THING WORD "POS :LETTER
  80. ONEHIST :LETTER
  81. END
  82.  
  83. TO FULLCLEAR
  84. CT
  85. SHOWCLEAR1 0 0 :FULLTEXT 1
  86. PR []
  87. INVTYPE [TYPE ANY CHAR TO REDISPLAY]
  88. IGNORE RC
  89. REDISPLAY "TRUE
  90. END
  91.  
  92. TO GUESS.SINGLE
  93. IF EMPTYP :LIST.SINGLE [OP "FALSE]
  94. IF EMPTYP BF :LIST.SINGLE [QBIND FIRST :LIST.SINGLE "A OP "TRUE]
  95. QBIND :MAX.SINGLE "A
  96. QBIND (IFELSE EQUALP FIRST :LIST.SINGLE :MAX.SINGLE ~
  97.                      [LAST :LIST.SINGLE] [FIRST :LIST.SINGLE]) "I
  98. OP "TRUE
  99. END
  100.  
  101. TO GUESS.TRIPLE
  102. IF EMPTYP :LIST.TRIPLE [OP "FALSE]
  103. IF :MAXCOUNT < (3+CNT LAST :MAX.TRIPLE)     ~
  104.       [QBIND FIRST :MAX.TRIPLE "T     ~
  105.        QBIND FIRST BF :MAX.TRIPLE "H     ~
  106.        QBIND LAST :MAX.TRIPLE "E     ~
  107.        OP "TRUE]
  108. OP "FALSE
  109. END
  110.  
  111. TO HISTCHAR :CHAR
  112. IF NAMEP :CHAR [HISTLET :CHAR OP :CHAR]
  113. OP "
  114. END
  115.  
  116. TO HISTLET :LETTER
  117. LOCAL "CNT
  118. MAKE "CNT 1+CNT :LETTER
  119. SETCURSOR LIST (ASCII :LETTER)-(ASCII "A) (NONNEG 24-:CNT)
  120. TYPE :LETTER
  121. SETCNT :LETTER :CNT
  122. IF :MAXCOUNT < :CNT [MAKE "MAXCOUNT :CNT]
  123. END
  124.  
  125. TO HISTOGRAM :TEXT
  126. IF EMPTYP :TEXT [STOP]
  127. PREPARE.GUESS HISTWORD FIRST :TEXT
  128. HISTOGRAM BF :TEXT
  129. END
  130.  
  131. TO HISTWORD :WORD
  132. IF EMPTYP :WORD [OP " ]
  133. OP WORD HISTCHAR FIRST :WORD HISTWORD BF :WORD
  134. END
  135.  
  136. TO INITCOUNT :TYPE
  137. SETLIST. :TYPE []
  138. SETCOUNT. :TYPE 0
  139. END
  140.  
  141. TO INITVARS :FROM :TO
  142. SETCNT :FROM 0
  143. MAKE :FROM "| |
  144. IF NAMEP WORD "BOUND :FROM [ERN WORD "BOUND :FROM]
  145. IF EQUALP :FROM :TO [STOP]
  146. INITVARS CHAR 1+ASCII :FROM :TO
  147. END
  148.  
  149. TO INVTYPE :TEXT
  150. TYPE STANDOUT :TEXT
  151. END
  152.  
  153. TO LESSTEXT
  154. IF EMPTYP :TEXTSTACK [STOP]
  155. MAKE "TEXT FIRST :TEXTSTACK
  156. MAKE "TEXTSTACK BF :TEXTSTACK
  157. REDISPLAY "TRUE
  158. END
  159.  
  160. TO LIGHT :LETTER
  161. SETCURSOR LIST 6+(ASCII :LETTER)-(ASCII "A) 6
  162. INVTYPE :LETTER
  163. MAKE WORD "BOUND :LETTER "TRUE
  164. END
  165.  
  166. TO LIST. :WORD
  167. OUTPUT THING (WORD "LIST. :WORD)
  168. END
  169.  
  170. TO MORETEXT
  171. IF EMPTYP :MORETEXT [STOP]
  172. MAKE "TEXTSTACK FPUT :TEXT :TEXTSTACK
  173. MAKE "TEXT :MORETEXT
  174. REDISPLAY "TRUE
  175. END
  176.  
  177. TO NONNEG :NUMBER
  178. OP IFELSE :NUMBER < 0 [0] [:NUMBER]
  179. END
  180.  
  181. TO ONEHIST :LETTER
  182. POST (WORD :LETTER "- TWOCOL CNT :LETTER "- THING :LETTER) ~
  183.        CNT :LETTER
  184. TYPE "| |
  185. END
  186.  
  187. TO PARSEKEY :CHAR
  188. IF :CHAR = "@ [FULLCLEAR STOP]
  189. IF :CHAR = "+ [MORETEXT STOP]
  190. IF :CHAR = "- [LESSTEXT STOP]
  191. BIND :CHAR RC
  192. END
  193.  
  194. TO POST :TEXT :COUNT
  195. IF :COUNT = 0 [TYPE WORD FIRST :TEXT "|     | STOP]
  196. IFELSE :MAXCOUNT < :COUNT+3 [INVTYPE :TEXT] [TYPE :TEXT]
  197. END
  198.  
  199. TO PREPARE.GUESS :WORD
  200. IF EQUALP COUNT :WORD 1 [TALLY "SINGLE :WORD]
  201. IF EQUALP COUNT :WORD 3 [TALLY "TRIPLE :WORD]
  202. END
  203.  
  204. TO QBIND :FROM :TO
  205. IF NAMEP THING :FROM [STOP]
  206. MAKE :FROM :TO
  207. FIXHIST :FROM
  208. LIGHT :TO
  209. END
  210.  
  211. TO REDISPLAY :FLAG
  212. CT
  213. SHOWHIST
  214. SETCURSOR [6 6]
  215. TYPE "ABCDEFGHIJKLMNOPQRSTUVWXYZ
  216. IF :FLAG [ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZ]
  217. SHOWCODE :TEXT
  218. IF :FLAG [SHOWCLEAR :TEXT]
  219. END
  220.  
  221. TO SETCNT :LETTER :THING
  222. MAKE (WORD "CNT :LETTER) :THING
  223. END
  224.  
  225. TO SETCOUNT. :WORD :THING
  226. MAKE (WORD "COUNT. :WORD) :THING
  227. END
  228.  
  229. TO SETLIST. :WORD :THING
  230. MAKE (WORD "LIST. :WORD) :THING
  231. END
  232.  
  233. TO SHOWCLEAR :TEXT
  234. SHOWCLEAR1 8 0 :TEXT 2
  235. END
  236.  
  237. TO SHOWCLEAR1 :ROW :COL :TEXT :DELTA
  238. IF EMPTYP :TEXT [STOP]
  239. IF :ROW > 23 [STOP]
  240. IF KEYP [STOP]
  241. IF (:COL+COUNT FIRST :TEXT) > 37 ~
  242.    [SHOWCLEAR1 :ROW+:DELTA 0 :TEXT :DELTA STOP]
  243. CLEARWORD :ROW :COL FIRST :TEXT
  244. SHOWCLEAR1 :ROW (:COL+1+COUNT FIRST :TEXT) BF :TEXT :DELTA
  245. END
  246.  
  247. TO SHOWCODE :TEXT
  248. MAKE "MORETEXT []
  249. SHOWCODE1 8 0 :TEXT
  250. END
  251.  
  252. TO SHOWCODE1 :ROW :COL :TEXT
  253. IF EMPTYP :TEXT [MAKE "MORETEXT [] STOP]
  254. IF :ROW > 22 [STOP]
  255. IF AND EQUALP :ROW 16 EQUALP :COL 0 [MAKE "MORETEXT :TEXT]
  256. IF (:COL+COUNT FIRST :TEXT) > 37 [SHOWCODE1 :ROW+2 0 :TEXT STOP]
  257. CODEWORD :ROW :COL FIRST :TEXT
  258. SHOWCODE1 :ROW (:COL+1+COUNT FIRST :TEXT) BF :TEXT
  259. END
  260.  
  261. TO SHOWHIST
  262. SHOWROW 0 "A 5
  263. SHOWROW 1 "F 5
  264. SHOWROW 2 "K 5
  265. SHOWROW 3 "P 5
  266. SHOWROW 4 "U 5
  267. SHOWROW 5 "Z 1
  268. END
  269.  
  270. TO SHOWROW :ROW :LETTER :NUM
  271. SETCURSOR LIST 0 :ROW
  272. SHOWROW1 :LETTER :NUM :ROW 0
  273. END
  274.  
  275. TO SHOWROW1 :LETTER :NUM :ROW :COL
  276. IF :NUM = 0 [STOP]
  277. MAKE WORD "POS :LETTER LIST :COL :ROW
  278. ONEHIST :LETTER
  279. SHOWROW1 CHAR 1+ASCII :LETTER :NUM-1 :ROW :COL+7
  280. END
  281.  
  282. TO TALLY :TYPE :WORD
  283. LOCAL "THIS
  284. MAKE "THIS WORD :TYPE :WORD
  285. IF NOT MEMBERP :WORD LIST. :TYPE ~
  286.      [SETLIST. :TYPE FPUT :WORD LIST. :TYPE MAKE :THIS 0]
  287. MAKE :THIS SUM 1 THING :THIS
  288. MAKE "THIS THING :THIS
  289. IF :THIS > (COUNT. :TYPE) ~
  290.      [SETCOUNT. :TYPE :THIS MAKE (WORD "MAX. :TYPE) :WORD]
  291. END
  292.  
  293. TO TWOCOL :NUMBER
  294. IF :NUMBER > 9 [OP :NUMBER]
  295. OP WORD 0 :NUMBER
  296. END
  297.  
  298.  
  299. MAKE "CGRAM1 [DZYNUFQYJULLI, JPQHQ OK YR HOXPJ QNZEUJORY QCEQWJ XHRTOYX ~
  300.    ZW OYJR U TRHJPTPOLQ TRHLN. OYNQQN, RZH QCEQKKOGQ ERYEQHY TOJP ~
  301.    WHRVLQFK RD QNZEUJORY UJ WHQKQYJ KOFWLI FQUYK JPUJ JPQ |XHRTY-ZWK| NR ~
  302.    YRJ PUGQ KZEP U TRHLN. U NQEQYJ QNZEUJORY UOFK UJ, WHQWUHQK DRH, U ~
  303.    FRHQ TRHJPTPOLQ DZJZHQ, TOJP U NODDQHQYJ ERFFZYOJI KWOHOJ, NODDQHQYJ ~
  304.    REEZWUJORYK, UYN FRHQ HQUL ZJOLOJI JPUY UJJUOYOYX KJUJZK UYN KULUHI.]
  305. MAKE "CGRAM2 [LVO VFKP LFZJ MD OPAXFLIMN IZ LM GITOKFLO FNP ZLKONBLVON F ~
  306.    HMALV'Z INILIFLIUO, FNP FL LVO ZFYO LIYO LM ZOO LM IL LVFL VO JNMWZ ~
  307.    WVFL IZ NOXOZZFKH LM XMCO WILV LVO MNBMINB FXLIUILIOZ FNP XAGLAKO MD ~
  308.    ZMXIOLH, ZM LVFL VIZ INILIFLIUO XFN TO KOGOUFNL. IL IZ FTZAKP LM ~
  309.    LVINJ LVFL LVIZ LFZJ XFN TO FXXMYCGIZVOP TH ZM YAXV ZILLINB IN F TMS ~
  310.    DFXINB DKMNL, YFNICAGFLINB ZHYTMGZ FL LVO PIKOXLIMN MD PIZLFNL ~
  311.    FPYINIZLKFLMKZ. LVIZ IZ KFLVOK F WFH LM KOBIYONL FNP TKFINWFZV.]
  312. MAKE "CGRAM3 [PCODL HBDCX QXDRDLH YIHCODR, HBD RZBIIER GXD LIH ZIYQDHDLH ~
  313.    HI HDGZB GWHBDLHCZ ECHDXGZF, XDGNCLP GR G YDGLR IA ECUDXGHCIL GLN ~
  314.    ZWEHCOGHCIL. GLN C NIWUH HBGH YIRH IA WR JBI RDXCIWREF XDGN GLN JXCHD ~
  315.    HBD DLPECRB EGLPWGPD DODX EDGXLDN CH UF HBD XIWHD IA "XWL, RQIH, XWL" ~
  316.    HI RCEGR YGXLDX.]
  317. MAKE "CGRAM4 [JW BTN XNSGSYP EJKE GFEBBCG, DTYJBN FBCCSKSG, RYU FBCCSKSG ~
  318.    NSWCSFPSU PES USGJNS, WNSSUBA, RYU WTPTNS BW PES QBTYK, PESNS ZBTCU ~
  319.    LS YB KNRUJYK, YB PSGPJYK SVFSXP RG R PSRFEJYK ASPEBU, RYU YB ~
  320.    LCRFILBRNU DTYKCSG. JY WRFP, ZS RNS KSPPJYK CBFIGPSX GFESUTCJYK RYU ~
  321.    KNRUJYK PB PES XBJYP BW PBNPTNS.]
  322.